gl renderer: Avoid consecutive opacity ops
authorTimm Bäder <mail@baedert.org>
Sun, 3 Dec 2017 15:58:01 +0000 (16:58 +0100)
committerTimm Bäder <mail@baedert.org>
Thu, 21 Dec 2017 18:12:31 +0000 (19:12 +0100)
gsk/gl/gskglrenderops.c

index 2741320b2a9f4e028ed893c556b7ccdaa4deb5a7..3c97d94855f3abc0c3a49ddbf158dc474cbe8876 100644 (file)
@@ -207,13 +207,23 @@ ops_set_opacity (RenderOpBuilder *builder,
 {
   RenderOp op;
   float prev_opacity;
+  RenderOp *last_op;
 
   if (builder->current_opacity == opacity)
     return opacity;
 
-  op.op = OP_CHANGE_OPACITY;
-  op.opacity = opacity;
-  g_array_append_val (builder->render_ops, op);
+  last_op = &g_array_index (builder->render_ops, RenderOp, builder->render_ops->len - 1);
+
+  if (last_op->op == OP_CHANGE_OPACITY)
+    {
+      last_op->opacity = opacity;
+    }
+  else
+    {
+      op.op = OP_CHANGE_OPACITY;
+      op.opacity = opacity;
+      g_array_append_val (builder->render_ops, op);
+    }
 
   prev_opacity = builder->current_opacity;
   builder->current_opacity = opacity;